#!/usr/bin/env python
#-*- coding:utf-8 -*
#
# Kontrolcu
#  - LibKontrolcu icin konsol uygulaması
#
# Geliştiriciler:
#  - Osman KARAGÖZ <osmank3@gmail.com>
#  - Taha Doğan Güneş <tdgunes@gmail.com>
# Belgelendirici:
#  - Okan Okuroğulları <ookurogullari@gmail.com>
#
# Web Sitesi: http://code.google.com/p/kontrolcu
# Lisansı: GPL v3 ile lisanslanmıştır.
#
# Yardım dökümanlarını http://code.google.com/p/kontrolcu/w/list 
#                                     adresinden bulabilirsiniz.


import sys, hashlib, os
try:
	import libkontrolcu
except:
	print "libkontrolcu modülü bulunamadı!"
veri = []
sonveri = [] 
taslak = ""
dosliste = sys.argv
dosliste.pop(0) 
x = 0
try:
  if dosliste[0]=="--help" or dosliste[0]=="--yardim":
    print "---------------------   Yardım   ---------------------\nKontrolcu, dosyaların kontrol toplamlarını alan bir programdır.\n\nKullanım:\n  kontrolcu.py [kont. tip] [dosya] [dosya] ...\n  kontrolcu.py [kont. tip] kaydet [dosya] [dosya] ...\n  kontrolcu.py sagla [dosya] [kont. top.] [dosya] [kont. top.] ...\n  kontrolcu.py kontrol [kontrol_dosyası]\n  kontrolcu.py numaralandir\n  kontrolcu.py --yardim\n  kontrolcu.py --surum\n\nKomutlar:\n  Parametresiz kullanım kontrol toplamlarını ekrana yazar.(ilk kullanım)\n  'save'        'kaydet'       -> Kontrol toplamlarını dosyaya yazar.\n  'ccheck'      'sagla'        -> Verilen dosya ile verilen kontrol toplamını\n                                  karşılaştırır.\n  'check'       'kontrol'      -> Kontrol toplamı dosyalarından kontrol yapar.\n                                  'İnternet üzerindeki kontrol toplamı\n                                  dosyalarını da okuyabilir.'\n  'enumeration' 'numaralandir' -> Dosya listesini numaralandırarak kolay\n                                  seçim yapılmasını sağlar.\n  '--help'      '--yardim'     -> Ekrana bu yazıyı döker.\n  '--version'   '--surum'      -> Sürüm hakkında bilgiler içerir.\n"
    exit()
  elif dosliste[0] == "--version" or dosliste[0]=="--surum":
    print "Sürüm: 1.0"
    exit()

  #kontrol toplam seçimi 0. argüman ile olacak
  if dosliste[0] == "md5":
    kontip=hashlib.md5
    dosliste.pop(0)#md5 listeden çıkarılıyor
  elif dosliste[0] == "sha1":
    kontip=hashlib.sha1
    dosliste.pop(0)#sha1 listeden çıkarılıyor

  if dosliste[0] == "save" or dosliste[0]=="kaydet":
    dosliste.pop(0) #"save" siliniyor
    libkontrolcu.anamotor(kontip, dosliste) #dosliste libkontrolcu'a gidiyor.
    if len(dosliste) > 1:
      libkontrolcu.soru(kontip, 1, dosliste)
    elif len(dosliste) == 1:
      libkontrolcu.soru(kontip, 2, dosliste)
    else:
      print "Kullandığınız için teşekkürler."
  elif dosliste[0] == "check" or dosliste[0] == "kontrol":
    if dosliste[1][:5] == "http:" or dosliste[1][:4] == "ftp:" or dosliste[1][:6] == "https:":
      if len(dosliste) == 2:
        yol = raw_input("Dosyanın bulunduğu yolu girin (Bu dizin için ./ kullanın): ")
        dosliste.append(yol)
      else:
        pass
    libkontrolcu.check(dosliste[1:])
  elif dosliste[0] == "ccheck" or dosliste[0] == "sagla":
    libkontrolcu.ccheck(dosliste[1:])
  elif dosliste[0] == "enumeration" or dosliste[0] == "numaralandir":

    def num():

      global kontip
      #kontrol toplam seçimi 1. argüman ile olacak
      if dosliste[1] == "md5":
        kontip=hashlib.md5
      elif dosliste[1] == "sha1":
        kontip=hashlib.sha1

      a=os.listdir("./")
      a.sort()
      n=1
      numara={}
      for dosya in a:
        if os.path.isfile(dosya) == 1:
          numara[n] = dosya
          print n, "->", numara[n]
          n=n+1
        else:
          pass
      secilen=raw_input("Seçtiklerinizi aralarında boşluk bırakarak yazın:\n")
      listesec=secilen.split()
      m=0
      global liste
      liste=[]
      while len(listesec)>m:
        try:
          liste.append(numara[int(listesec[m])])
        except KeyError:
          print "Listeden sayı seçmelisiniz."
          exit()
        m=m+1

    if dosliste[-1]=="--help" or dosliste[-1]=="--yardim":
      print "--Yardım--\nEkranda listelenen dosyalara, başlarında bulunan numaralardan\nulaşmak için kullanılan komut\n\nKullanım:\n  kontrolcu.py numaralandir [kont. tip]\n  kontrolcu.py numaralandir [kont. tip] kaydet\n  kontrolcu.py numaralandir kontrol\n  kontrolcu.py numaralandir --yardim\n\nKomutlar:\n  Parametresiz kullanım kontrol toplamlarını ekrana yazar.(ilk kullanım)\n  'save'      'kaydet'    -> Kontrol toplamlarını dosyaya yazar.\n  'check'     'kontrol'   -> Kontrol toplamı dosyalarından kontrol yapar.\n                             'İnternet üzerindeki kontrol toplamı\n                             dosyalarını da okuyabilir.'\n  '--help'    '--yardim'  -> Ekrana bu yazıyı döker."

    elif dosliste[-1] == "save" or dosliste[-1]=="kaydet":
      num()
      libkontrolcu.anamotor(kontip, liste) #liste libkontrolcu'a gidiyor.
      if len(liste) > 1:
        libkontrolcu.soru(kontip, 1, liste)
      elif len(liste) == 1:
        libkontrolcu.soru(kontip, 2, liste)
      else:
        print "Kullandığınız için teşekkürler."
    elif dosliste[-1] == "check" or dosliste[-1]=="kontrol":
      num()
      liste.append(os.getcwd())
      libkontrolcu.check(liste[0:])
    else:
      num()
      libkontrolcu.anamotor(kontip, liste)
  else:
    libkontrolcu.anamotor(kontip, dosliste) #Direk işleme libkontrolcu girişi
except IndexError:
  print "Genel yardım için '--help' kullanın."
except NameError:
  print "Kontrol tipini yazın!"
